/**
 * Token工具函数
 */

/**
 * 解析JWT token
 * @param {string} token 
 * @returns {object|null} 解析后的payload
 */
export function parseJWT(token) {
  try {
    const base64Url = token.split('.')[1]
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
    const jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {
      return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
    }).join(''))
    
    return JSON.parse(jsonPayload)
  } catch (error) {
    console.error('解析JWT失败:', error)
    return null
  }
}

/**
 * 检查token是否即将过期（剩余时间少于5分钟）
 * @param {string} token 
 * @returns {boolean} 是否即将过期
 */
export function isTokenNearExpiry(token) {
  if (!token) return true
  
  const payload = parseJWT(token)
  if (!payload || !payload.exp) return true
  
  const now = Math.floor(Date.now() / 1000)
  const timeLeft = payload.exp - now
  
  // 如果剩余时间少于5分钟（300秒），认为即将过期
  return timeLeft < 300
}

/**
 * 检查token是否已过期
 * @param {string} token 
 * @returns {boolean} 是否已过期
 */
export function isTokenExpired(token) {
  if (!token) return true
  
  const payload = parseJWT(token)
  if (!payload || !payload.exp) return true
  
  const now = Math.floor(Date.now() / 1000)
  return payload.exp < now
}

/**
 * 获取token剩余时间（秒）
 * @param {string} token 
 * @returns {number} 剩余时间（秒），如果已过期返回0
 */
export function getTokenRemainingTime(token) {
  if (!token) return 0
  
  const payload = parseJWT(token)
  if (!payload || !payload.exp) return 0
  
  const now = Math.floor(Date.now() / 1000)
  const timeLeft = payload.exp - now
  
  return Math.max(0, timeLeft)
}

/**
 * 自动刷新token的定时器
 */
let refreshTimer = null

/**
 * 启动token自动刷新
 */
export function startTokenRefresh() {
  // 清除之前的定时器
  if (refreshTimer) {
    clearInterval(refreshTimer)
  }
  
  // 每分钟检查一次token状态
  refreshTimer = setInterval(() => {
    const token = localStorage.getItem('token')
    const refreshToken = localStorage.getItem('refreshToken')
    
    if (token && refreshToken && isTokenNearExpiry(token)) {
      console.log('Token即将过期，尝试自动刷新')
      
      // 动态导入刷新token的API
      import('../api/auth.js').then(({ refreshToken: refreshTokenApi }) => {
        return refreshTokenApi(refreshToken)
      }).then(response => {
        const { accessToken, refreshToken: newRefreshToken } = response.data
        
        // 更新本地存储的token
        localStorage.setItem('token', accessToken)
        localStorage.setItem('refreshToken', newRefreshToken)
        
        console.log('Token自动刷新成功')
      }).catch(error => {
        console.error('Token自动刷新失败:', error)
        
        // 刷新失败，清除登录状态
        localStorage.removeItem('token')
        localStorage.removeItem('refreshToken')
        localStorage.removeItem('userInfo')

        // 跳转到登录页（避免在登录页面时重复跳转）
        if (window.location.pathname !== '/login') {
          window.location.href = '/login'
        }
      })
    }
  }, 60000) // 每分钟检查一次
}

/**
 * 停止token自动刷新
 */
export function stopTokenRefresh() {
  if (refreshTimer) {
    clearInterval(refreshTimer)
    refreshTimer = null
  }
}
